DockerLession05 构建私有Registry

写在前面

前一段时间准备使用 Docker 模拟一下现有项目的线上生产环境, 搭建过程还算顺利,
使用的 docker image 有以下这些:

  1. centos
  2. node 业务逻辑层
  3. redis 数据缓存层
  4. mongodb/mysql 数据持久化层, 可动态切换数据库类型
  5. nginx 做基于域名的虚拟主机转发

1) elasticsearch

1) kibana

1) logstash

由于下载源在国外网速很慢, 甚至很多已经被墙, 开始在单机测试的时候, 软件就下载了两天之久.
现在要将服务多机部署, 解决方案:

  1. 重新下载一次现有的 image 包
  2. 使用国内第三方加速源
  3. 使用 save/load 导出导入到另一台机器
  4. 构建私有 Registry

重新下载肯定不现实, 国内第三方和国外官方源都有限支持私有项目(一些工程不能公有开源),
save/load 方法当出现较多包时管理麻烦, 较好的解决方案就是构建私有 Registry.

国内一些第三方加速 & 第三方服务托管

时速云: https://hub.tenxcloud.com

数人云: http://www.dataman-inc.com/

灵雀云: http://www.alauda.cn/ & https://hub.alauda.cn/

打包原有已下载 images

        tar
     /       \
save/   export\
   /load       \import
  /    commit   \
image -------- container
        run
  1. 镜像转成容器:sudo docker run imagename01
  2. 容器转成镜像:sudo docker commit imagename01
  3. 容器转成文件:sudo docker export > /home/export.tar
  4. 镜像转成文件:sudo docker save imagename01 > /home/save.tar
  5. export.tar 文件转成镜像:cat /home/export.tar | sudo docker import - imagename02:latest
  6. save.tar 文件转成镜像:docker load < /home/save.tar

注:一般情况下,save.tar 比 export.tar 大一点点而已,export 比较小,因为它丢失了历史和数据元 metadata

构建私有 Registry

拉取 Docker 镜像

docker pull registry

基于镜像创建服务

mkdir -p /data/docker/zz-registry
docker run -d -p 5000:5000 -v /data/docker/zz-registry:/tmp/registry registry

上传已有镜像

docker tag node-dev:latest 127.0.0.1:5000/node-dev:latest
docker push 127.0.0.1:5000/node-dev
ls /data/docker/zz-registry

查看 映射目录发现已经有文件被创建了

其他机器使用私有源

docker pull ip:port/node-dev
Donate - Support to make this site better.
捐助 - 支持我让我做得更好.